/**
 * 版权所有(C)，上海勾芒信息科技，2017，所有权利保留。
 * 
 * 项目名：	car-web
 * 文件名：	EncodeUtil.java
 * 模块说明：	
 * 修改历史：
 * 2017年2月22日 - Debenson - 创建。
 */
package com.alex.wechat.mp.util;

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;

import org.apache.commons.lang3.StringUtils;

/**
 * @author Debenson
 * @since 0.1
 */
public class EncodeUtil {

  /**
   * 过滤掉超过3个字节的UTF8字符
   * 
   * @param text
   * @return
   * @throws UnsupportedEncodingException
   */
  public static String filterOffUtf8mb4(String text) throws UnsupportedEncodingException {
    if (StringUtils.isBlank(text)) {
      return text;
    }

    byte[] bytes = text.getBytes("utf-8");
    ByteBuffer buffer = ByteBuffer.allocate(bytes.length);
    int i = 0;
    while (i < bytes.length) {
      short b = bytes[i];
      if (b > 0) {
        buffer.put(bytes[i++]);
        continue;
      }

      b += 256; // 去掉符号位
      if (((b >> 5) ^ 0x6) == 0) {
        buffer.put(bytes, i, 2);
        i += 2;
      } else if (((b >> 4) ^ 0xE) == 0) {
        buffer.put(bytes, i, 3);
        i += 3;
      } else if (((b >> 3) ^ 0x1E) == 0) {
        i += 4;
      } else if (((b >> 2) ^ 0x3E) == 0) {
        i += 5;
      } else if (((b >> 1) ^ 0x7E) == 0) {
        i += 6;
      } else {
        buffer.put(bytes[i++]);
      }
    }
    buffer.flip();
    return new String(buffer.array(), "utf-8");
  }

}
